home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Language/OS - Multiplatform Resource Library
/
LANGUAGE OS.iso
/
prolog
/
modprolg
/
mod-prol.lha
/
Prolog
/
Examples
/
final_report.mod
< prev
next >
Wrap
Text File
|
1992-06-08
|
2KB
|
89 lines
structure stack1 =
struct
fun item/2 and empty/0.
newstack(empty).
pop(item(X,Stack),Stack,X).
push(Stack,X,item(X,Stack)).
isempty(empty).
end.
signature stacksig =
sig
pred pop/3 and push/3 and newstack/1 and isempty/1.
end.
structure stack2/stacksig =
struct
fun item/2 and empty/0.
newstack(empty).
pop(item(X,Stack),Stack,X).
push(Stack,X,item(X,Stack)).
isempty(empty).
end.
structure uses_stacks =
struct
fun item/2.
fun newitem/2 = stack1:item.
stack_non_empty(newitem(_,_)).
% ....
end.
structure renamedstack = stack2.
functor utils(x/stacksig) =
struct
structure s = x.
ismember(X,Stack) :-
s:pop(Stack,_,X).
ismember(X,Stack) :-
s:pop(Stack,NewStack,_),
ismember(X,NewStack).
end.
structure memberstack = utils(stack2).
structure stack3/stacksig =
struct
newstack([]).
pop([X|Stack],Stack,X).
push(Stack,X,[X|Stack]).
isempty([]).
end.
functor moreutils(x/stacksig) =
struct
structure stack = x.
haslength(Stack,0) :-
stack:isempty(Stack).
haslength(Stack,Len) :-
stack:pop(Stack,Nstack,_),
haslength(Nstack,Part),
Len is Part + 1.
end.
structure one = utils(stack2).
structure two = moreutils(stack3).
% functor example(x/sig1, y/sig2) =
% struct
% structure a = x.
% structure b = y.
% test :-
% a:stack:newstack(X),
% b:stack:isempty(X).
%
% end.
%
% structure final = example(one,two).
%
% functor example(x/sig1, y/sig2 sharing x:stack = y:stack) =
% struct
% ....
% end.
%
% structure one = utils(stack2).
%
% structure two = moreutils(stack2).